<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;

class GoodsController extends Controller
{
	/**
	*	商品管理首页
	*/
	public function getIndex(Request $request){
		// 查询数据库的数据 进行分页展示
		$data = DB::table('goods_basis') 
		-> where('goodsname','like','%'.$request -> input('search','').'%')
		
        -> orderBy('status','asc')
        -> orderBy($request -> input('n','id'),'desc')

		-> paginate($request -> input('dataTables-example_length' , 10));
		return view('admin.goods.index',['data' => $data,'request' => $request -> all()]);
	}
    /**
    *   商品详情视图
    */
    public function getDetails(Request $request){
        // 判断商品信息是否上传
        if(!$request -> has('gid')) {
            return back() -> with('error','未知错误请刷新并再次尝试');
        }
        // 商品基本信息
        $data = DB::table('goods_basis')
        -> where('id',$request -> input('gid'))
        -> first();
        // 商品详细信息
        $data_detail = DB::table('goods_details')
        -> where('gid',$data['id'])
        -> first();
        // 获取用户帐号信息
        $data_user = DB::table('user')
        -> where('username',$data['username'])
        -> first();
        // 获取商品的分类
        $class = self::findClass($data['class1'] , $data['class2'] , $data['class3']);
        
        // 商品评价数量
        $count = DB::table('evaluate')
        -> where('gid',$data['id'])
        -> count();
       
        

        return view('admin.goods.details',[
            'count' => $count,
            'data' => $data,
            'details' => $data_detail,
            'user' => $data_user,
            'class' => $class
            ]);
    }
    /**
    *   相关评论视图
    */
    public function getReviews(Request $request) {

        if(!$request -> has('gid')) {
            return back() -> with('error','未知错误请刷新并再次尝试');
        }
       // 用商品的gid获取与商品有关的所有评论
        $data = DB::table('evaluate')
        -> where('gid',$request -> input('gid'))
        -> where('writer','like','%'.$request -> input('search' , '').'%')
        -> orderBy('status','asc')

        -> orderBy($request -> input('n','id'),'desc')

        -> paginate($request -> input('dataTables-example_length',10));

        // 获取商品名
        $goodsname = DB::table('goods_basis') -> where('id',$request -> input('gid')) -> value('goodsname');
        return view('admin.goods.reviews',['goodsname' => $goodsname,'data' => $data,'request' => $request -> all()]);
    }
    /**
    *   评论状态变更 屏蔽/显示
    */
    public function getViewsstatus(Request $request) {
        // 确定两个必要参数都存在
        if(!$request -> has('id') || !$request -> has('status')) {
            return 0;
        }
        // 对状态的值进行变更
        $status = $request -> input('status') == 1 ? 0 : 1;
        // 对数据库数据进行更改并返回影响行数
        $res = DB::table('evaluate') 
        -> where('id',$request -> input('id'))
        -> update(['status' => $status]);

        return $res;
    }
    /**
    *   评论内容编辑 
    */
    public function getViewedit(Request $request) {
        if(!$request -> has('id') || !$request -> has('content')){
            return 0;
        }
        $res = DB::table('evaluate') 
        -> where('id',$request -> input('id'))
        -> update(['content' => $request -> input('content')]);
        return $res;
    }
    /**
    *   评论详情页  对该评论的回复 用户信息
    */
    public function getToview(Request $request) {
        // 查询评论详情表
        $data = DB::table('to_evaluate')
        -> where('pid',$request -> input('id'))
        -> where('writer','like','%'.$request -> input('search','').'%')
        -> orderBy($request -> input('n','id'),'desc')
        -> paginate($request -> input('dataTables-example_length' , 10));

        // 获取商品名
        $goodsname = DB::table('evaluate')
        
        -> join('goods_basis','goods_basis.id','=','evaluate.gid')

        -> where('evaluate.id',$request -> input('id'))
        -> value('goodsname');
       

        return view('admin.goods.toreview',[ 'data' => $data ,'goodsname' => $goodsname,'request' => $request -> all()]);
    }
    /**
    *   评论详情页 回复的回复 状态变更 屏蔽/显示
    */
    public function getToviewsstatus(Request $request) {
        // 确定两个必要参数都存在
        if(!$request -> has('id') || !$request -> has('status')) {
            return 0;
        }
        // 对状态的值进行变更
        $status = $request -> input('status') == 1 ? 0 : 1;
        // 对数据库数据进行更改并返回影响行数
        $res = DB::table('to_evaluate') 
        -> where('id',$request -> input('id'))
        -> update(['status' => $status]);

        return $res;
    }
    /**
    *   评论详情 =〉评论回复表 内容编辑 
    */
    public function getToviewedit(Request $request) {
        if(!$request -> has('id') || !$request -> has('content')){
            return 0;
        }
        $res = DB::table('to_evaluate') 
        -> where('id',$request -> input('id'))
        -> update(['content' => $request -> input('content')]);
        return $res;
    }
    /**
    *   评论删除 回复表
    */
    public function getToviewdel(Request $request) {
        if(!$request -> has('id')) {
            return 0;
        }
        // 删除从表
        $res1 = DB::table('to_evaluate') 
        -> where('id',$request -> input('id'))
        -> delete();

        return $res1;
    }
    /**
    *   评论删除 --- 删除评论表和回复表两张表
    */
    public function getViewdel(Request $request) {
        if(!$request -> has('id')) {
            return 0;
        }
        // 删除主表数据
        $res = DB::table('evaluate') 
        -> where('id',$request -> input('id'))
        -> delete();
        // 删除从表
        $res1 = DB::table('to_evaluate') 
        -> where('pid',$request -> input('id'))
        -> delete();
        return $res || $res1 ? 1 : 0 ;
    }
    /**
    *   删除单个商品图片的方法
    */
    public function getDelone(Request $request) {
        // 判断是否有数据接受到
        if(!$request -> has('src')) {
            return 0;
        }
        // 对数据内的数据抹除
        $res = DB::table('goods_details')
        -> where('id',$request -> input('card'))
        -> update(['image'.$request -> input('num') => null]);
        // 接收商品地址 
        $src = $request -> input('src');
        // 对图片进行删除
        $res1;
       if (file_exists('.'.$src)) {
           $res1 = unlink('.'.$src);
            
        }
        return $res || $res1 ? 1 : 0;
       
        
    } 
    /**
    *   获取商品所属分类的静态
    */
    static public function findClass($id1,$id2,$id3) {
        // 一级分类
        $data[] = DB::table('y_classified_one') -> where('id',$id1) -> value('classname');
        // 二级分类
        $data[] = DB::table('y_classified_two') -> where('id',$id2) -> value('classname');
        // 三级分类
        $data[] = DB::table('y_classified_three') -> where('id',$id3) -> value('classname');

        return $data;
    }
    /**
    *   商品数据库删除执行 删除与商品相关的全部信息
    */
    public function getGoodsdel(Request $request) {
        
        // 拿到要删除商品在商品基础表里的id
        $goodsid =  $request -> input('id');

        // 对头像图片进行删除
        $picture = DB::table('goods_basis') -> where('id',$goodsid) -> value('picture');
        if(file_exists('.'.$picture)) {
            unlink('.'.$picture);
        }

        // 删除商品基础表
        $res = DB::table('goods_basis')

        -> where('id',$goodsid)

        ->delete();

        // 商品评论下的回复进行删除
        $to_evaluate = DB::table('to_evaluate')
        -> whereIn('pid', DB::table('evaluate')
                            -> where('gid',$goodsid)
                            -> select('id'))
        -> delete();

        

       // 确定商品基础表删除成功后对商品评论表进行删除       
        $res1 = DB::table('evaluate')
        -> where('gid',$goodsid)
        -> delete();

        // 对商品详情的图片进行删除
        $picture = DB::table('goods_details') 
         -> where('gid',$goodsid)
         -> select('image1','image2','image3','image4','image5') 
         -> get();
        
        if($picture) {
                $picture = $picture[0];
               // 循环删除图片
                 foreach ($picture as $key => $value) {
                   
                     if ( file_exists('.'.$value) && $value != null ) {
                        unlink('.'.$value);
                     }
                 }
            }
         

       // 删除商品详情表 
        $res2 = DB::table('goods_details') 
        -> where('gid',$goodsid)
        -> delete();

        // 删除没有图片的空目录
        self::reDir('./goodsupload/goodsPhoto');

        // 判断删除是否成功
        if($res || $res1 || $res2) {
            return 1;
        } else {
            return 0;
        }
    }
	/**
	*	商品状态的变更
	*/
	public function postUpdate(Request $request){
        // 判断值是否接收成功
        if(!$request -> has('id') || !$request -> has('status')){
            // 返回0表示参数接受失败
            return 0;
        }
      
		// 接收ajax发送来的参数 
		// $data['id'] = $request -> input('id');
        $data['status'] = $request -> input('status');
        // 对数据库进行更新
        $res = DB::table('goods_basis') 
        -> where('id',$request -> input('id'))
        -> update($data);
        // 返回更改的影响函数
        return $res;
    }
    /**
    *	商品添加测试 功能可能不会上线
    */
    public function getAdd(){
       
    	return view('admin.goods.add');
    }
    /**
    *   ajax获取第一个数组
    */
    public function postArr(){
        $class1 = DB::table('y_classified_one')
            -> get();
        return $class1;
    }
    /**
    *   根据接受的参数获取第二个数组
    */
    public function postArr2(Request $request){
        $class2 = DB::table('y_classified_two')
            -> where('pid',$request -> input('pid'))
            -> get();

        return $class2;
    }
    /**
    *   根据接受的参数获取第三个数组
    */
    public function postArr3(Request $request){
        $class3 = DB::table('y_classified_three')
            -> where('pid',$request -> input('pid'))
            -> get();

        return $class3;
    }
    /**
    *	接受编辑器提交的内容测试使用
    */
    public function postShow(Request $request){
    	// 接收上传过来的图片标签
    	$tag = $request -> input('content');
    	
    	// 匹配用的正则 只支持单图
    	$preg = "/src=['\"](.*)['\"].*title/";
    	preg_match_all($preg, $tag, $res);
    }
    /**
    *   清空空的目录
    */
    static function reDir($path) {
     
        if(is_dir($path) && ($handle = opendir($path))!==false){  
       // 遍历文件夹
        while(($file=readdir($handle))!==false){   
            // 当前目录
            if($file!='.' && $file!='..'){  
                 // 目录
                $curfile = $path.'/'.$file;  
                 // 如果是目录则继续遍历         
                if(is_dir($curfile)){   

                    self::reDir($curfile);   
                    // 目录为空,=2是因为. 和 ..存在
                    if(count(scandir($curfile))==2){
                        // 删除空目录
                        rmdir($curfile);               
                    }  
                }  
            }  
        }  
        closedir($handle);  
        }  
    }
    /**
    *   文件上传以及商品图片的基本信息
    */
    public function postDoadd(Request $request) {
        // 存缓存
        $request -> flash();
        // 查看必要值有没有填写
        $this -> validate($request,[
                'Aclass' => 'required',
                'Bclass' => 'required',
                'Cclass' => 'required',
                'goodsname' => 'required',
                'price' => 'required',
                'inventor' => 'required',
                'pic' => 'required'
            ],[
                'Aclass.required' => '一级分类没有选择',
                'Bclass.required' => '二级分类没有选择',
                'Cclass.required' => '三级分类没有选择',
                'goodsname.required' => '商品名要填写',
                'price.required' => '价格没填写',
                'inventor.required' => '库存没填写',
                'pic.required' => '商品头像未上传'
            ]);
        // 获取图片后缀
        $lastname = $request -> file('pic') ->getClientOriginalExtension();
        // 防止时间偏差
        $time = time();
        // 文件的存放路径和文件名
        $space = time().rand(999,100).'.'.$lastname;
        // 对文件进行移动
        $request -> file('pic') -> move('./goodsupload/goodsphoto/'.$time.'/',$space);
        // 准备要对数据库进行插入的数据
        $data['goodsname'] = $request -> input('goodsname');
        $data['price'] = $request -> input('price');
        $data['ctime'] = time();
        $data['picture'] = '/goodsupload/goodsphoto/'.$time.'/'.$space;
        $data['inventory'] = $request -> input('inventor');
        $data['username'] = '我自己测试添加的';
        $data['class1'] = $request -> input('Aclass');
        $data['class2'] = $request -> input('Bclass');
        $data['class3'] = $request -> input('Cclass');
        $data['sales'] = 0;
        $data['status'] = 0;
        $data['evaulate'] = 0;
        // 执行对数据库的插入
        $res = DB::table('goods_basis')
        ->  insertGetId($data);
        // 判断插入是否成功
        if ($res) {
            return  redirect() -> action('admin\GoodsController@getAdd2',[$res]);
        } else {
            return back();
        }
    }
    /**
    *   商品上传第二步 商品详情表的添加
    */
    public function getAdd2(Request $request,$id){
        // 确定参数接收到
        if(!$id) {
            return back() -> with('error','未知错误请刷新并再次尝试');
        }
        // 返回视图业面
        return view('admin.goods.add2',['gid' => $id]);
    }
    /**
    *   执行商品详情表的添加
    */
    public function postDoadd2(Request $request) {
        // 将所有图片放在一个文件夹内
        $time = time();
        // 对图片进行上传
        if($request -> hasFile('image1') && $request -> hasFile('image2') && $request -> hasFile('image3') && $request -> hasFile('image4') && $request -> hasFile('image5')){
            // 生成文件名
            $image1  = time().rand(1000,9999).'.'. $request -> file('image1') ->getClientOriginalExtension();
            $image2  = time().rand(1000,9999).'.'. $request -> file('image2') ->getClientOriginalExtension();
            $image3  = time().rand(1000,9999).'.'. $request -> file('image3') ->getClientOriginalExtension();
            $image4  = time().rand(1000,9999).'.'. $request -> file('image4') ->getClientOriginalExtension();
            $image5  = time().rand(1000,9999).'.'. $request -> file('image5') ->getClientOriginalExtension();
            // 对文件进行移动
            $request -> file('image1') -> move('./goodsupload/goodsphoto/'.$time.'/',$image1);
            $request -> file('image2') -> move('./goodsupload/goodsphoto/'.$time.'/',$image2);
            $request -> file('image3') -> move('./goodsupload/goodsphoto/'.$time.'/',$image3);
            $request -> file('image4') -> move('./goodsupload/goodsphoto/'.$time.'/',$image4);
            $request -> file('image5') -> move('./goodsupload/goodsphoto/'.$time.'/',$image5);
        }else{
            return back() -> with('error','上传失败');
        }
        // 准备数据库插入的数据
        $data['gid'] = $request -> input('gid');
        $data['attrbute'] = $request -> input('first_name1','').':'.$request -> input('last_name1','').'<br/>'.$request -> input('first_name2','').':'.$request -> input('last_name2','').'<br/>'.$request -> input('first_name3','').':'.$request -> input('last_name3','').'<br/>'.$request -> input('first_name4','').':'.$request -> input('last_name4','').'<br/>'; 
        $data['title'] = $request -> input('title');
        $data['details'] = $request -> input('detail');
        $data['image1'] = '/goodsupload/goodsphoto/'.time().'/'.$image1;
        $data['image2'] = '/goodsupload/goodsphoto/'.time().'/'.$image2;
        $data['image3'] = '/goodsupload/goodsphoto/'.time().'/'.$image3;
        $data['image4'] = '/goodsupload/goodsphoto/'.time().'/'.$image4;
        $data['image5'] = '/goodsupload/goodsphoto/'.time().'/'.$image5;
        // 对数据库进行插入
        $res = DB::table('goods_details') -> insert($data);
        
        // 根据结果进行页面跳转
        if($res) {
            return redirect('/admin/goods/index')->with('success','添加成功');
        } else {
            return redirect('/admin/goods/index')->with('error','添加失败');
        }
    }
   

}
